home *** CD-ROM | disk | FTP | other *** search
/ OpenGL Superbible (2nd Edition) / OpenGL SuperBible e2.iso / tools / Mesa-3.0 / DEMOS / GAMMA.C < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-14  |  4.7 KB  |  175 lines

  1. /* $Id: gamma.c,v 3.0 1998/02/14 18:42:29 brianp Exp $ */
  2.  
  3. /* Draw test patterns to help determine correct gamma value for a display.
  4.    When the intensities in the top row nearly match the intensities in
  5.    the bottom row you've found the right gamma value.
  6.  
  7.    For more info about gamma correction see:
  8.    http://www.inforamp.net/~poynton/notes/colour_and_gamma/GammaFAQ.html
  9.  
  10.    This program is in the public domain
  11.  
  12.    Brian Paul  19 Oct 1995 */
  13.  
  14. /* Conversion to GLUT by Mark J. Kilgard */
  15.  
  16. /*
  17.  * $Log: gamma.c,v $
  18.  * Revision 3.0  1998/02/14 18:42:29  brianp
  19.  * initial rev
  20.  *
  21.  */
  22.  
  23.  
  24. #include <stdio.h>
  25. #include <string.h>
  26. #include <stdlib.h>
  27. #include <GL/glut.h>
  28.  
  29. static void 
  30. Reshape(int width, int height)
  31. {
  32.   glViewport(0, 0, (GLint) width, (GLint) height);
  33.  
  34.   glMatrixMode(GL_PROJECTION);
  35.   glLoadIdentity();
  36.   glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
  37.   glMatrixMode(GL_MODELVIEW);
  38. }
  39.  
  40. /* ARGSUSED1 */
  41. static void 
  42. key_esc(unsigned char key, int x, int y)
  43. {
  44.   if(key == 27) exit(0);  /* Exit on Escape */
  45. }
  46.  
  47. static GLubyte p25[] =
  48. {
  49.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  50.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  51.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  52.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  53.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  54.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  55.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  56.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  57.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  58.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  59.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  60.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  61.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  62.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  63.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  64.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  65. };
  66.  
  67. static GLubyte p50[] =
  68. {
  69.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  70.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  71.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  72.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  73.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  74.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  75.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  76.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  77.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  78.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  79.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  80.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  81.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  82.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  83.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  84.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  85. };
  86.  
  87. static GLubyte p75[] =
  88. {
  89.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  90.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  91.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  92.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  93.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  94.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  95.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  96.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  97.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  98.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  99.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  100.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  101.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  102.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  103.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  104.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  105. };
  106.  
  107. static void 
  108. display(void)
  109. {
  110.  
  111.   glClear(GL_COLOR_BUFFER_BIT);
  112.  
  113. /** DITHERED ROW **/
  114.  
  115.   /* solid black */
  116.  
  117.   /* 25% white */
  118.   glEnable(GL_POLYGON_STIPPLE);
  119.   glColor3f(1.0, 1.0, 1.0);
  120.   glPolygonStipple(p25);
  121.   glRectf(-0.6, 1.0, -0.2, 0.01);
  122.  
  123.   /* 50% white */
  124.   glPolygonStipple(p50);
  125.   glRectf(-0.2, 1.0, 0.2, 0.01);
  126.  
  127.   /* 75% white */
  128.   glPolygonStipple(p75);
  129.   glRectf(0.2, 1.0, 0.6, 0.01);
  130.  
  131.   /* 100% white */
  132.   glDisable(GL_POLYGON_STIPPLE);
  133.   glRectf(0.6, 1.0, 1.0, 0.01);
  134.  
  135. /*** GRAY ROW ***/
  136.  
  137.   /* solid black */
  138.  
  139.   /* 25% white */
  140.   glColor3f(0.25, 0.25, 0.25);
  141.   glRectf(-0.6, -0.01, -0.2, -1.0);
  142.  
  143.   /* 50% white */
  144.   glColor3f(0.5, 0.5, 0.5);
  145.   glRectf(-0.2, -0.01, 0.2, -1.0);
  146.  
  147.   /* 75% white */
  148.   glColor3f(0.75, 0.75, 0.75);
  149.   glRectf(0.2, -0.01, 0.6, -1.0);
  150.  
  151.   /* 100% white */
  152.   glColor3f(1.0, 1.0, 1.0);
  153.   glRectf(0.6, -0.01, 1.0, -1.0);
  154.  
  155.   glFlush();
  156. }
  157.  
  158. int 
  159. main(int argc, char **argv)
  160. {
  161.   glutInit(&argc, argv);
  162.   glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
  163.  
  164.   glutInitWindowPosition(50, 50);
  165.   glutInitWindowSize(400, 200);
  166.  
  167.   glutCreateWindow("gamma test patterns");
  168.   glutReshapeFunc(Reshape);
  169.   glutDisplayFunc(display);
  170.   glutKeyboardFunc(key_esc);
  171.  
  172.   glutMainLoop();
  173.   return 0;             /* ANSI C requires main to return int. */
  174. }
  175.